#pragma once
#include <iostream>
#include <string>
#include <sys/types.h>
#include <sys/time.h>
namespace ns_log
{
    class TimeUtil
    {
    public:
        /*
            @brief 获取时间戳
            */
        static std::string getTimeStamp()
        {
            struct timeval _time;
            gettimeofday(&_time, nullptr);

            return std::to_string(_time.tv_sec);
        }
    };

    /*
        @brief 日等级
    */
    enum
    {
        INFO,
        DEBUG,
        WARNING,
        ERROR,
        FATAL
    };

    inline std::ostream &log(const std::string &level, const std::string &fileName, int line)
    {
        std::string message = "[";
        message += level;
        message += "]";

        // 添加文报错文件的名称
        message += "[";
        message += fileName;
        message += "]";
        //  添加报错内容在第几行
        message += "[";
        message += std::to_string(line);
        message += "]";
        // 日志时间戳
        message += "[";
        message += TimeUtil::getTimeStamp();
        message += "]";

        // cout 本质内部包含缓冲区
        std::cout << message;// 不要endl进行刷新
        return std::cout;
    }

    #define LOG(level) log(#level, __FILE__, __LINE__)
}